package it.dk.view;

import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.Input;

/**
 * Classe che rappresenta lo stato di visualizzazione della home screen.
 * 
 * Pattern utilizzato: State
 */
public class GameStateStarting extends GameState{

	private BoardRender boardRender;
	private GameSound soundManager;
	private long time;
	private static final float DELAY = 5;

	/**
	 * Costruttore della classe
	 * 
	 * @param board	riferimento alla board di gioco
	 */
	public GameStateStarting(DonkeyKong board) {
		super(board);
		time = System.currentTimeMillis();
		soundManager = GameSound.getInstance();
		soundManager.playLevelStart();
	}

	/**
	 * Metodo che viene richiamato da Board per l'aggiornamento della
	 * logica del gioco.
	 * In questo caso aggiunge un ritardo prima dell'inizio della demo.
	 * 
	 * @param container	oggetto di tipo GameContainer che rappresenta la finestra contenente il gioco
	 * @param delta		periodo di aggiornamento
	 */
	public void update(GameContainer container, int delta) {
		if((System.currentTimeMillis() - time) / 1000.0 >= DELAY)
			board.newDemo();
	}

	/**
	 * Metodo che viene richiamato da Board per
	 * il render degli oggetti grafici
	 * 
	 * @param container	oggetto di tipo GameContainer che rappresenta la finestra contenente il gioco
	 * @param g			oggetto di tipo Graphics che consente la renderizzazione di un generioco oggetto grafico
	 */
	public void render(GameContainer container, Graphics g) {
		boardRender = BoardRender.getInstance();
		boardRender.drawHomeScreen(g);
	}

	/**
	 * Metodo che rileva il rilascio di un tasto
	 * 
	 * @param key	codice del tasto rilasciato
	 * @param c		carattere associato al tasto rilasciato
	 */
	public void keyReleased(int key, char c) {
		switch(key) {
		case Input.KEY_ENTER:
			board.newGame();
			break;
		}
	}
}
